<template>
    <div class="cart_page">
        <table>
            <thead>
                <tr>
                    <th style="width: 8%">
                        <input type="checkbox" v-model="checkAll" />
                    </th>
                    <th style="width: 30%">礼品信息</th>
                    <th>兑换分数</th>
                    <th>数量</th>
                    <th>小计 (鸡腿)</th>
                    <th>操作</th>
                </tr>
            </thead>
            <tbody>
                <tr v-for="item,index in carts" :key="index">
                    <td>
                        <input type="checkbox" v-model="checkList[index]" />
                    </td>
                    <td>
                        <section>
                            <img width="84" :src="imgBaseUrl+item.coverImg" alt="列表图片" />
                            <div class="info">
                                <h5>{{item.title}}</h5>
                                <p>{{item.versionDescription}}</p>
                            </div>
                        </section>
                    </td>
                    <td>{{item.coin}}鸡腿</td>
                    <td>
                        <div class="step">
                            <span @click="redCart(item.id,item.total)">-</span>
                            <input type="text" disabled v-model="item.total" />
                            <span @click="addCart(item.id,item.total)">+</span>
                        </div>
                    </td>
                    <td>{{item.totalCost}}鸡腿</td>
                    <td>
                        <span class="del" @click="delCart(item.id)">删除</span>
                    </td>
                </tr>
            </tbody>
        </table>
        <div class="total">
            总计：
            <span>{{TotalNumberOfDrumsticks}}鸡腿</span>
        </div>
        <div class="submit">提交</div>
    </div>
</template>
<script>
import { cartsApi, addCartApi, edleteApi } from "@/request/api";
import { mapActions } from "vuex";
export default {
    data() {
        return {
            stepNum: 1,
            // 全选
            // checkAll: false,
            // 单选按钮数组
            checkList: [],
            // 数据
            carts: [],
            // checkAll: true,
            checkList: [],
        };
    },
    async created() {
        await this.getcarts();
        // 创建 checkList  需要上面的请求是异步的
        this.checkList = this.carts.map((item) => false);
    },
    methods: {
        ...mapActions({
            asyncChangeIsShowToast: "showToast/asyncChangeIsShowToast",
        }),
        async getcarts() {
            let res = await cartsApi();
            if (!res) return;
            if (res.code == 0) {
                console.log(res);
                this.carts = res.data;
            }
        },
        async addCart(id, total) {
            let res = await addCartApi({
                productId: id,
                total: 1,
            });
            if (!res) return;
            if (res.code == 0) {
                // console.log(res);
                this.getcarts();
            }
            if (res.code == 400) {
                this.asyncChangeIsShowToast({
                    isShow: true,
                    title: res.message,
                    type: "danger",
                });
                return;
            }
        },
        async redCart(id, total) {
            if (total == 1) {
                this.asyncChangeIsShowToast({
                    isShow: true,
                    title: "是否要删除",
                    type: "danger",
                });
                return;
            }
            let res = await addCartApi({
                productId: id,
                total: -1,
            });
            if (!res) return;
            if (res.code == 0) {
                this.getcarts();
            }
        },
        async delCart(id) {
            let res = await edleteApi({
                id,
            });
            if (!res) return;
            if (res.code == 0) {
                this.getcarts();
                this.asyncChangeIsShowToast({
                    isShow: true,
                    title: "删除成功",
                    type: "success",
                });
                return;
            }
        },
    },
    computed: {
        checkAll: {
            get() {
                return !this.checkList.includes(false);
            },
            set(newVal) {
                this.checkList = this.carts.map((item) => newVal);
            },
        },
        // 鸡腿总数
        TotalNumberOfDrumsticks() {
            let ret = this.carts.reduce((pre, cur, index) => {
                return pre + (this.checkList[index] ? cur.totalCost : 0);
            }, 0);
            return ret;
        },
    },
};
</script>
<style lang="less" scoped>
.cart_page {
    background: #fff;
    table {
        width: 100%;
        border: 1px solid #e6e6e6;
        box-sizing: border-box;
        color: #666;
        border-collapse: collapse;
        font-size: 14px;
        thead {
            background: #f2f2f2;
            th {
                padding: 19px 0;
                .iconfont {
                    cursor: pointer;
                }
                .icon-yduifuxuankuangxuanzhong {
                    color: #0a328e;
                }
            }
        }
        tbody {
            tr {
                td {
                    vertical-align: middle;
                    text-align: center;
                    padding: 19px 0;
                    table-layout: fixed; // td的宽度固定，不随内容变化
                    .iconfont {
                        cursor: pointer;
                    }
                    .icon-yduifuxuankuangxuanzhong {
                        color: #0a328e;
                    }
                    section {
                        padding-left: 20px;
                        display: flex;
                        box-sizing: border-box;
                        img {
                            margin-right: 12px;
                        }
                        .info {
                            padding-top: 20px;
                            flex: 1;
                            overflow: hidden;
                            box-sizing: border-box;
                            text-align: left;
                            h5 {
                                overflow: hidden;
                                color: #333;
                                font-size: 18px;
                                white-space: nowrap;
                                text-overflow: ellipsis;
                                margin-bottom: 20px;
                            }
                            p {
                                color: #666;
                                overflow: hidden;
                                white-space: nowrap;
                                text-overflow: ellipsis;
                            }
                        }
                    }
                    .step {
                        width: 106px;
                        height: 32px;
                        margin: auto;
                        span {
                            float: left;
                            width: 30px;
                            height: 32px;
                            display: block;
                            border: solid 1px #d1d1d1;
                            font-size: 20px;
                            box-sizing: border-box;
                            font-weight: normal;
                            font-stretch: normal;
                            line-height: 30px;
                            letter-spacing: 0px;
                            color: #999999;
                            text-align: center;
                            cursor: pointer;
                            background: #fff;
                        }
                        input {
                            box-sizing: border-box;
                            width: 46px;
                            height: 32px;
                            float: left;
                            text-align: center;
                            font-size: 14px;
                            line-height: 23px;
                            letter-spacing: 0px;
                            color: #666666;
                            border: 0;
                            border-top: 1px solid #d1d1d1;
                            border-bottom: 1px solid #d1d1d1;
                            background: #fff;
                        }
                    }
                    .del {
                        border: 1px solid #ececec;
                        border-radius: 4px;
                        padding: 5px 10px;
                        cursor: pointer;
                        &:hover {
                            color: #fff;
                            background: #0a328e;
                        }
                    }
                }
            }
        }
    }
    .total {
        padding: 30px 0;
        text-align: right;
        font-size: 22px;
        span {
            font-weight: bold;
            color: #fd604d;
        }
    }
    .submit {
        width: 175px;
        height: 40px;
        text-align: center;
        line-height: 40px;
        font-family: SourceHanSansSC-Light;
        font-size: 18px;
        font-weight: normal;
        font-stretch: normal;
        letter-spacing: 0px;
        color: #ffffff;
        cursor: pointer;
        background-color: #0a328e;
        float: right;
    }
}
</style>